# -*- coding: utf-8 -*-
# @Time    : 2024/1/9 20:01
# @Author  : micah
# @File    : 8.复习xpath语法.py
# @Software: PyCharm


"""
1.xpath可以用于在html文档中搜索提取部分数据
2.利用python中的lxml第三方包中的etree模块完成xpath数据提取
3.对于xpath语句的语法复习
"""

from lxml import etree

text = ''' <div> <ul> 
        <li class="item-1"><a href="link1.html">first item</a></li> 
        <li class="item-1"><a href="link2.html">second item</a></li> 
        <li class="item-inactive"><a href="link3.html">third item</a></li> 
        <li class="item-1"><a href="link4.html">fourth item</a></li> 
        <li class="item-0"><a href="link5.html">fifth item</a> 
        </ul> </div> '''


# 1.创建etree对象
tree = etree.HTML(text)

# 2.利用HTML方法返回的element对象完成xpath语法
li_list = tree.xpath('//li[@class="item-1"]')  # 返回在文档中符合条件的所有标签对象

# 3.获取所有标签中的文本
for li in li_list:
    print('获取所有文本-1:', li.xpath('./a/text()'))
    print('获取所有文本-2:', li.xpath('.//text()'))

# 4.获取所有标签中的第一个文本
li = tree.xpath('//li[@class="item-1"][1]/a/text()')
print('获取第一个标签中的文本:', li)

# 5.获取除了第一个标签文本之外的所有文本
# 当前语句中的数字可以控制忽略前多少个
li_list = tree.xpath('//li[@class="item-1"][position()>1]')
for li in li_list:
    print('获取除了第一个标签文本之外的所有文本:', li.xpath('./a/text()'))

# 6.获取最后一个标签文本
li_last_1 = tree.xpath('//li[@class="item-1"][last()]/a/text()')
print('获取最后一个标签文本:', li_last_1)


# 7.根据标签中的文本提取对应的标签对象
li = tree.xpath('//li/a[text()="third item"]')
print(li[0].xpath('./@href'))

# 8.获取倒数第二个标签中的文本
li_last_2 = tree.xpath('//li[@class="item-1"][last()-1]/a/text()')
print(li_last_2)

# 9.将element对象转为字符串对象
html_str = etree.tostring(tree).decode()
print(html_str)

















